package com.mmall.service;

import com.mmall.common.ServerResponse;
import com.mmall.pojo.User;

/**
 * 门户用户接口，service层
 */
public interface IUserService {

    /**
     * 用户登录
     * @param username 用户名
     * @param password 用户密码
     * @return
     */
    ServerResponse<User> login(String username, String password);

    /**
     * 用户注册
     * @param user 用户信息
     * @return
     */
    ServerResponse<String> register(User user);

    /**
     * 查询用户名和邮箱是否已经存在的方法
     * @param str 用户名或邮箱
     * @param type 用户信息为那种类型
     * @return
     */
    ServerResponse<String> checkValid(String str,String type);

    /**
     * 忘记密码 通过用户名查询问题
     * @param username 用户名
     * @return
     */
    ServerResponse<String> selectQuestion(String username);

    /**
     * 提交问题答案
     * @param username 用户名
     * @param question 问题
     * @param answer 答案
     * @return
     */
    ServerResponse<String> checkAnswer(String username,String question,String answer);

    /**
     * 忘记密码的重设密码
     * @param username 用户名
     * @param passwordNew 用户新密码
     * @param forgetToken 提交问题答案后返回给浏览器的加密参数
     * @return
     */
    ServerResponse<String> forgetRestPassword(String username,String passwordNew,String forgetToken);

    /**
     * 登录中状态重置密码
     * @param passwordOld 旧密码
     * @param passwordNew 新密码
     * @return
     */
    ServerResponse<String> RestPassword(String passwordOld, String passwordNew,User user);

    /**
     * 登录状态更新个人信息
     * username是不能被更新
     * email也要进行一个校验，校验新的email是不是已经存在，并且存在的email如果相同的话,不能更新为我们当前的这个用户的
     * @param userNew 用户跟新的信息
     * @return
     */
    ServerResponse<User> updateInformation(User userNew);

    /**
     * 获取当前登录用户的详细信息，并强制登录
     * @param id
     * @return
     */
    ServerResponse<User> getInfirmation(Integer id);

    /**
     * 判断用户是否为管理员账号
     * @param user 用户信息
     * @return
     */
    ServerResponse checkAdminRole(User user);
}
